#include<bits/stdc++.h>

#define rp(i,a,b) for(int i=a;i<b;++i)
#define rrp(i,b,a) for(int i=b;i>=a;--i)

#define modulo 998244353

using namespace std;

struct node
{
	int num;
	std::vector<int> krecord;
};

void init();

long long ans = 0;

char matrix[5100][5100];
node dp[5100][5100];

int h,w,k;

long long cal(int cnt){
	int cnt0 = h+w-1-cnt-1;
	int cnt1 = h*w - h - w + 1 - (k-cnt);
	long long a = 1;
	while(cnt0>0){
		a *= 2;
		a%=modulo;
		--cnt0;
	}
	if(matrix[h][w]=='\0')a=(a*3)%modulo;
	else cnt1++;
	long long b = 1;
	while(cnt1 > 0){
		b*=3;
		b%=modulo;
		--cnt1;
	}
	// printf("a=%lld b=%lld\n", a,b);
	return (a*b)%modulo;
}

int main(){
	scanf("%d%d%d", &h,&w,&k);
	int a,b;
	char c;
	rp(i , 0 , k){
		cin>>a>>b>>c;
		matrix[a][b]=c;
	}
	init();
	rp(i , 2 , h) rp(j , 2 , w){
		dp[i][j].num += dp[i][j-1].num;
		dp[i][j].krecord.insert(dp[i][j].krecord.begin(),dp[i][j-1].begin(),dp[i][j-1].end());
		if(matrix[i][j-1] != '\0')
			
	}

	printf("%lld\n", ans);
	
	return 0;
}

void init(){
	dp[1][1].num = 1;
	dp[1][1].krecord.push_back(0);
	rp(i , 2 , h+1){ 
		if(matrix[i-1][1] == '\0'){
			dp[i][1] = dp[i-1][1];
		}else if(matrix[i-1][1] == 'R'){
			break;
		}else{
			dp[i][1] = dp[i-1][1];
			dp[i][1].krecord[0]++;
		}
	}
	rp(i , 2 , w+1){ 
		if(matrix[1][i-1] == '\0'){
			dp[1][i] = dp[1][i-1];
		}else if(matrix[1][i-1] == 'D'){
			break;
		}else{
			dp[1][i] = dp[1][i-1];
			dp[1][i].krecord[0]++;
		}
	}
}